(xftfont_open): Make sure that Xrender extension is added
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Mon, 11 May 2009 09:29:49 +0000 (09:29 +0000)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Mon, 11 May 2009 09:29:49 +0000 (09:29 +0000)
before Xft one (Bug#1696).

src/xftfont.c

index af0feb9b7e6b48461feb73dafeee266ab5306da7..4a1b488bcf9d7efc42968aacf00ead5afae67c03 100644 (file)
@@ -274,6 +274,16 @@ xftfont_open (f, entity, pixel_size)
 
 
   BLOCK_INPUT;
+  /* Make sure that the Xrender extension is added before the Xft one.
+     Otherwise, the close-display hook set by Xft is called after the
+     one for Xrender, and the former tries to re-add the latter.  This
+     results in inconsistency of internal states and leads to X
+     protocol error when one reconnects to the same X server.
+     (Bug#1696)  */
+  {
+    int event_base, error_base;
+    XRenderQueryExtension (display, &event_base, &error_base);
+  }
   match = XftFontMatch (display, FRAME_X_SCREEN_NUMBER (f), pat, &result);
   FcPatternDestroy (pat);
   xftfont = XftFontOpenPattern (display, match);